﻿#pragma once
#ifndef XL_XEXPAND_DWEBX_LIB_REF_H
#define XL_XEXPAND_DWEBX_LIB_REF_H
#include "pch.h"
#include "module_WebOat.h"
#ifdef XC_MODUL
#include "module_base.h"
#else 
#endif //  XC_MODUL

#include <map>
#include <string>

//向前声明
struct WoRefModelInfo; struct WoRefModelMemberInfo;




/*
 需要记录：简单类型，结构体，类，等
 简单类型比较好实现
 结构体里面可以嵌套变量和类,方法等
 类里面会嵌套变量与方法等

 理想状态下的实现:

 ===================
 //注册模型,返回模型句柄
 1.注册模型
    1).基础反射类型(int,bool),不需要特殊处理的类(例如CXTextA,std::vector)等
        modelHandle = RefModelRegBase(type,refFunc);
    2).如果为嵌套类型,例如结构体
        //先注册结构体
        modelHandle = RefModelRegStruct(type);
        //结构体添加成员信息
        //type为原型,member为type下的成员,函数应该自行计算成员偏移量(一般使用宏生成代码),可使用#var反射成员名称
        RefModelStructAddMember(modelHandle,type,member);
 2.注册
    1).反射结构与其显式别名应区分开,即:
        注册模型
        申请别名
        别名->模型

*/



// 需要有一个哈希表
// 绑定变量类型名称与类型信息
// std::map<变量类型名称,类型信息>
inline std::map<std::string, WoRefModelInfo*> g_RefModeRegister;





//嵌套类型关联
//std::map<std::string,RefModelInfo*> g_RefNestingModeRegister;




#include "refRegister.h"
void  WoRefModelToJson(WoTemplateJson& json, const char* modelName, void* modePtr);

#endif 


